// Loesung_von_Aufgabe_10.3_3a_Uhren_01

float tA; // Zeitschritt für die Uhr in der Nähe der Masse
float tB = 0.1; // Zeitschritt für die sehr weit entfernte Uhr 
float g = 6.6726E-11; // Gravitationskonstante
float m = 2E33; // 1000fache Masse der Sonne
float c = 3E8; // Lichtgeschwindigkeit
float r = 3E6; // Abstand der Uhr A vom Mittelpunkt der Masse. Entspricht 100 Pixel im Fenster
float a; // Rotationsfaktor für den roten Zeiger der Uhr in der Nähe der Masse
float b; // Rotationsfaktor für den grünen Zeiger der sehr weit entfernten Uhr

void setup()
{
  size(800, 300);
}

void draw()
{
  background(220);

  // Schwarzes Loch
  noStroke();
  fill(0);
  ellipse(50, 150, 50, 50);

  tA = tB*(1-(g*m)/(c*c*r)); // Berechnung der Zeitdilatation

  pushMatrix(); // Speichert die bisherigen Einstellungen

  // Die Uhr in der Nähe der Masse wird erzeugt (roter Zeiger)
  translate(150, 150); // Koordinatenursprung wird verschoben

  // Kreis
  stroke(100);
  fill(0, 180, 180);
  ellipse(0, 0, 125, 125);

  rotate(a*PI/30.0);
  a = a + tA; // Rotationsgeschwindigkeit des Uhrzeigers in der Nähe der Masse

  stroke(255, 0, 0);
  strokeWeight(3);
  line(0, 0, 50, 0);
  fill(255, 0, 0);
  triangle(50, -5, 60, 0, 50, 5);

  popMatrix(); /* Lädt die oben gespeicherten Einstellungen wieder.
   Somit addiert sich die folgende Rotation nicht zur obigen Rotation */

  pushMatrix(); // Speichert die bisherigen Einstellungen

  // Die sehr weit entfernte Uhr wird erzeugt (grüner Zeiger)
  translate(700, 150); // Koordinatenursprung wird verschoben

  // Kreis
  stroke(100);
  fill(0, 180, 180);
  ellipse(0, 0, 125, 125);

  // grüner Zeiger
  rotate(b*PI/30.0); 
  b = b + tB; // Rotationsgeschwindigkeit des Uhrzeigers der sehr weit entfernten Uhr

  stroke(0, 255, 0);
  strokeWeight(3);
  line(0, 0, 60, 0);
  fill(0, 255, 0);
  triangle(50, -5, 60, 0, 50, 5); 

  popMatrix(); // Lädt die oben gespeicherten Einstellungen wieder, damit der Text nicht rotiert

  // Zeitangabe
  textSize(30);
  fill(255, 0, 0);
  text("Uhr A", 110, 60);
  text(round(a), 130, 260);
  fill(0, 200, 0);
  text("Uhr B", 660, 60);
  text(round(b), 680, 260);
}